/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo.DAO;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import modelo.Cargo;
import modelo.Empresa;
import modelo.IdiomaOferta;
import modelo.PracticaLaboral;
import modelo.conexion.Conexion;

/**
 *
 * @author Carlos Jose Mendoza
 */
public class PracticaLaboralDao implements Serializable {
    
    private Connection con = null;
    private PreparedStatement pre = null;
    Conexion co = new Conexion();
    
     public boolean registrarPractica(PracticaLaboral objPracticaLaboral){
      boolean estado = false;
       con = co.conectar();
       String sql = "insert into ofertas (identificadorOferta, identificadorCargo, codigoAdministrador,"
               + "fechaPublicacion, sexo, fechaLimite, disponibilidad, cedulaAdministrador, numeroVacantes,"
               + "semestreRequerido, valorRemuneracionPractica, fechaInicoPractica, fechaFinalPractica,"
               + "programa, esPractica, esOferta, descripcionOferta) values (incremento_id_aspirante.NextVal, "
               + "'1106', 1100, '"+objPracticaLaboral.getFechaPublicacion()+"', '"+objPracticaLaboral.getSexo()+"',"
               + "'"+objPracticaLaboral.getFechaLimite()+"', '"+objPracticaLaboral.getDisponibilidad()+"', '12345', "
               + " "+objPracticaLaboral.getNumeroDeVacantes()+", '"+objPracticaLaboral.getSemestreRequerido()+"', "
               + ""+objPracticaLaboral.getValorRemuneracion()+", '"+objPracticaLaboral.getFechaInicio()+"', "
               + "'"+objPracticaLaboral.getFechaFinal()+"', '"+objPracticaLaboral.getPrograma()+"', 'true', 'false','"+objPracticaLaboral.getDescripcionOferta()+"')";
       
        try {
            pre = con.prepareStatement(sql);
            pre.executeUpdate();
            estado = true;
            pre.close();
            con.close();
        } catch (SQLException ex) {
            estado = false;
             throw new ExceptionInInitializerError(ex.getMessage());
        }
       return estado;
    }
     
     public List<PracticaLaboral> listarOfertas() {
         List<PracticaLaboral> listaPractica = new ArrayList<>();
         PracticaLaboral practica = null;
         con = co.conectar();
         String sql ="select to_char(fechaPublicacion, 'DD/MM/YYYY') as fechaPublicacion, disponibilidad, descripcionOferta, identificadorOferta, to_char(fechaLimite, 'DD/MM/YYYY')as fechaLimite from ofertas";
        try {
            pre = con.prepareStatement(sql);
            ResultSet re = pre.executeQuery();
            Date date = null;
            while(re.next()){
                practica = new PracticaLaboral();
                practica.setFechaPublicacion(re.getString("fechaPublicacion"));
                practica.setDisponibilidad(re.getString("disponibilidad"));
                practica.setDescripcionOferta(re.getString( "descripcionOferta"));
                practica.setIdentificadorOferta(Integer.parseInt(re.getString("identificadorOferta")));
                listaPractica.add(practica);
            }
            con.close();
            pre.close();
        } catch (SQLException ex) {
            throw new ExceptionInInitializerError(ex.getMessage());
        }
         return listaPractica;
     }
     
     public PracticaLaboral consultarPractica (String codigo) {
          PracticaLaboral practica = new PracticaLaboral(); 
          Empresa empresa = new Empresa();
          Cargo cargo = new Cargo();
         con = co.conectar();
         String sql ="select descripcionOferta, disponibilidad, numeroVacantes, programa, semestreRequerido,valorRemuneracionPractica,sexo,"
                 + "to_char(fechaPublicacion, 'DD/MM/YYYY') as fechaPublicacion, to_char(fechaLimite, 'DD/MM/YYYY')as fechaLimite, to_char(fechaInicoPractica, 'DD/MM/YYYY')as fechaInicoPractica, "
                 + "to_char(fechaFinalPractica, 'DD/MM/YYYY') as fechaFinalPractica, identificadorCargo from ofertas where identificadorOferta="+codigo+"";
        try {
            pre = con.prepareStatement(sql);
           ResultSet res = pre.executeQuery();
           if(res.next()) {
               practica.setDescripcionOferta(res.getString("descripcionOferta"));
               practica.setDisponibilidad(res.getString("disponibilidad"));
               practica.setNumeroDeVacantes(res.getInt("numeroVacantes"));
               practica.setPrograma(res.getString("programa"));
               practica.setSemestreRequerido(res.getString("semestreRequerido"));
               practica.setValorRemuneracion(res.getDouble("valorRemuneracionPractica"));
               practica.setSexo(res.getString("sexo"));
               practica.setFechaPublicacion(res.getString("fechaPublicacion"));
               practica.setFechaLimite(res.getString("fechaLimite"));
               practica.setFechaInicio(res.getString("fechaInicoPractica"));
               practica.setFechaFinal(res.getString("fechaFinalPractica"));
               practica.setIdentificadorCargo(res.getInt("identificadorCargo"));
           }
                      pre.close();
                     con.close();
                     
         String sql2="select * from cargos where identificadorCargo='"+practica.getIdentificadorCargo()+"'";
                     
            con = co.conectar();
            PreparedStatement pre2 = con.prepareStatement(sql2);
            ResultSet res2 = pre2.executeQuery();
           if(res2.next()){
               cargo.setNombreCargos(res2.getString("nombreCargos"));
               cargo.setDescripcion(res2.getString("descripcion"));
               cargo.setIdentificacionEmpresa(res2.getInt("identificacionEmpresa"));
               practica.setCargo(cargo);
           }
           pre2.close();
           con.close();
           
           con = co.conectar();
           String sql3="select * from empresas where identificadorEmpresa="+cargo.getIdentificacionEmpresa()+"";
           PreparedStatement pre3 = con.prepareStatement(sql3);
           ResultSet res3 = pre3.executeQuery();
           if(res3.next()){
             empresa.setNombreEmpresa(res3.getString("nombreEmpresa"));
             empresa.setIdentificadorEmpresa(res3.getInt("identificadorEmpresa"));
              practica.setEmpresa(empresa);
           }
           pre3.close();
           con.close();
           
           con = co.conectar();
           String sql4="select * from idiomasOfertas where identificadorOferta"+codigo+"";
           PreparedStatement pre4 = con.prepareStatement(sql4);
           ResultSet res4 = pre4.executeQuery();
           IdiomaOferta idiomaOferta = new IdiomaOferta();
           if(res4.next()){
               idiomaOferta.setNombre(res4.getString("nombre"));
               idiomaOferta.setDominio(res4.getString("dominio"));
               practica.setIdiomas(idiomaOferta);
           }
           pre4.close();
           con.close();
           
            // select  ofertas.descripcionOferta, cargos.nombreCargos, empresas.nombreEmpresa from cargos, empresas, ofertas where ofertas.IDENTIFICADOROFERTA=1155 and ofertas.IDENTIFICADORCARGO = cargos.IDENTIFICADORCARGO and empresas.IDENTIFICADOREMPRESA= cargos.IDENTIFICACIONEMPRESA;
        } catch (SQLException ex) {
            Logger.getLogger(PracticaLaboralDao.class.getName()).log(Level.SEVERE, null, ex);
        }
         return practica;
     }
}
